<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
  <script type="text/javascript">
  console.log("=========return 函数调用 =========");
  function add(x,y){
    return x+y;
    console.log("返回后面的代码");
  }
  console.log(add(2,3));
  console.log("========== 递归==========");
  function  dib(num){
    if(num>2){
      return dib(num-2)+dib(num-1);
    }else{
      return 1;
    }
  }
  console.log(dib(6));
  console.log("=========凡是可以使用的地方，就能使用函数=========");
  var option =add;
  console.log(option(5,6));
  function a(op){
    return op;
  }
  a(add(8,9));
  console.log(a(add(8,9)));
  var b =  {
    name:add,
  }
  console.log(b.name(5,6));
  console.log("========name属性========");
  console.log("========name属性返回紧跟在function关键字之后的那个函数名========");
  console.log("========f1========");
  function f1(){
  }
  console.log(f1.name);
  var f2 = function(){

    console.log("========f2========");
    console.log(f2.name);
  }
    console.log("========length属性========");
    console.log("========length属性返回函数预期传入的参数个数,即函数定义之中的参数个数");
    function f3(a,b,c,d,e){
    }
    console.log(f3.length);
    console.log("========函数的toString方法返回函数的源码");
    function f4(){
      a();
      b();
      c();
      d();
    }
    console.log(f4.toString());
    console.log("========利用这一点，可以变相实现多行字符串========");
    var f5=function (val){
      var arr=val.toString().split('\n');
      return arr.slice(1,arr.length-1).join('\n');
    }
    function f6(){
      /*
      这是一个多行注释
    */
   }
  console.log(f5(f6.toString()));
  console.log("========全局变量，在函数外声明的变量========");

  var name="debang";
  function f7(){
    return name;
  }
  function f8(){
    return name + "is good";
  }
  console.log(f7());
  console.log(f8());
  console.log(f7()+f8());


  </script>
  </body>
</html>
